<?php  // $Id: upgrade.php,v 1.5.2.2 2008/12/12 13:12:59 tjhunt Exp $

// This file keeps track of upgrades to 
// the multichoice qtype plugin
//
// Sometimes, changes between versions involve
// alterations to database structures and other
// major things that may break installations.
//
// The upgrade function in this file will attempt
// to perform all the necessary actions to upgrade
// your older installtion to the current version.
//
// If there's something it cannot do itself, it
// will tell you what you need to do.
//
// The commands in here will all be database-neutral,
// using the functions defined in lib/ddllib.php

function xmldb_qtype_multichoice_upgrade($oldversion=0) {

	global $CFG, $THEME, $db;

	$result = true;

	// This upgrade actually belongs to the description question type,
	// but that does not have a DB upgrade script. Therefore, multichoice
	// is doing it.
	// The need for this is that for a while, descriptions were being created
	// with a defaultgrade of 1, when it shoud be 0. We need to reset them all to 0.
	// See MDL-7925. 
	if ($result && $oldversion < 2006121500) {
		$result = $result && set_field('question', 'defaultgrade', 0,
				'qtype', DESCRIPTION, 'defaultgrade', 1);
	}

	// Add a field so that question authors can choose whether and how the Choices are numbered.
	// Subsequently changed to not create an enum constraint, because it was causing problems -
	// See 2007081700 update.
	if ($result && $oldversion < 2007041300) {
		$table = new XMLDBTable('question_multichoice');
		$field = new XMLDBField('answernumbering');
		$field->setAttributes(XMLDB_TYPE_CHAR, '10', null, XMLDB_NOTNULL, null, null, null, 'abc', 'incorrectfeedback');
		$result = $result && add_field($table, $field);
	}

	// This upgrade actually belongs to the description question type,
	// but that does not have a DB upgrade script. Therefore, multichoice
	// is doing it.
	// The need for this is that for a while, descriptions were being created
	// with a defaultgrade of 1, when it shoud be 0. We need to reset them all to 0.
	// This is re-occurrence of MDL-7925, so we need to do it again. 
	if ($result && $oldversion < 2007072000) {
		require_once($CFG->libdir . '/questionlib.php');
		$result = $result && set_field('question', 'defaultgrade', 0,
				'qtype', DESCRIPTION, 'defaultgrade', 1);
	}

	// Drop enum constraint on 'answernumbering' column, and change ABC to ABCD becuase MySQL
	// sometimes can't cope with things that differ only by case.
	if ($result && $oldversion < 2007081700) {
		if ($result && $oldversion >= 2007041300) {
			$table = new XMLDBTable('question_multichoice');
			$field = new XMLDBField('answernumbering');
			$field->setAttributes(XMLDB_TYPE_CHAR, '10', null, XMLDB_NOTNULL, null, null, null, 'abc', 'incorrectfeedback');
			$result = $result && change_field_enum($table, $field);
		}
		$result = $result && set_field('question_multichoice', 'answernumbering', 'ABCD', 'answernumbering', 'ABC');
	}

	return $result;
}

?>
